
import java.util.ArrayList;
import java.util.HashMap;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Marcel
 */
public class Camara {

    private HashMap<Byte,Partido> partidos = new HashMap();

    public void addPartido(Partido p){
        if (p == null
            || partidos.containsKey(p.getNumero())){
            throw new IllegalArgumentException("Já há partido com este número. Não pode ser inserido");
        }
        else
            partidos.put(p.getNumero(), p);
    }

    public Partido getPartido(byte numero){
        return partidos.get(numero);
    }

    public int getTotalAprovados(){
        int total = 0;
        for (Partido p: partidos.values()){
            total += p.getTotalAprovados();
        }
        return total;
    }

    public int getTotalApresentados(){
        int total = 0;
        for (Partido p: partidos.values()){
            total += p.getTotalApresentados();
        }
        return total;
    }

    public float getMediaDesempenho() {
        float total = 0;
        int qtde = 0;

        // baseado na média ponderada
        for (Partido p: partidos.values()){
            int qtdePartido = p.getQtdVereadores();
            total += (p.getMediaDesempenho() * qtdePartido);
            qtde += qtdePartido;
        }

        return total / qtde;
    }

    public ArrayList<Vereador> getVereadoresAcimaMedia(){
        ArrayList<Vereador> retorno = new ArrayList();
        float media = this.getMediaDesempenho();

        for (Partido p: partidos.values()){
            ArrayList<Vereador> parlamentares = p.getVereadores();
            for (Vereador v:parlamentares){
                if (v.getDesempenho() > media){
                    retorno.add(v);
                }
            }
        }

        return retorno;
    }

    public Vereador getVereadorMenorDesempenho(){
        Vereador menor = null;
        for (Partido p: partidos.values()){
            ArrayList<Vereador> parlamentares = p.getVereadores();
            for (Vereador v:parlamentares){
                if (menor == null
                    || menor.getDesempenho() > v.getDesempenho()){
                    menor = v;
                }
            }
        }

        return menor;
    }

    public Vereador getVereadorMaisAprovados(){
        Vereador mais = null;
        for (Partido p: partidos.values()){
            Vereador v = p.getVereadorMaisAprovados();
            if (mais == null
                || mais.getQtProjAprov() < v.getQtProjAprov()){
                    mais = v;
            }
        }

        return mais;
    }

}
